Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit f952cede7397a82bd141197f8df71a612a9b770e


Parents : 0eb8274
Author : Ivan <ivan@quad4.io>
Signature : Invalid signer <e46112d44649266d71fe2193e00a4710>, author is <ivan@quad4.io>
Date : 2026-06-16T18:50:38-05:00

feat(interface): update BackboneInterface handling to display public relay or IFAC tunnel based on conditions, and add corresponding tests

Changes

2 files changed, 58 insertions(+), 1 deletions(-)


Diff

diff --git a/meshchatx/src/frontend/components/interfaces/Interface.vue b/meshchatx/src/frontend/components/interfaces/Interface.vue
index 3e3f6cc7..d131450f 100644
--- a/meshchatx/src/frontend/components/interfaces/Interface.vue
+++ b/meshchatx/src/frontend/components/interfaces/Interface.vue
@@ -260,7 +260,19 @@ export default {
return "Auto-detect Ethernet and Wi-Fi peers";
}
if (this.iface.type === "BackboneInterface") {
- return "Backbone (IFAC tunnel)";
+ if (this.isBackboneIfacTunnel) {
+ return "Backbone (IFAC tunnel)";
+ }
+ const remote = this.iface.remote || this.iface.target_host;
+ const port = this.iface.target_port ?? this.iface.listen_port;
+ if (remote && port != null && port !== "") {
+ return `${remote}:${port}`;
+ }
+ const listenIp = this.iface.listen_ip;
+ if ((listenIp || listenIp === "") && port != null && port !== "") {
+ return `${listenIp || "0.0.0.0"}:${port}`;
+ }
+ return "Backbone (public relay)";
}
return this.iface.description || "Custom interface";
},
@@ -315,6 +327,17 @@ export default {
if (st.connected === false || st.online === false) return false;
return null;
},
+ isBackboneIfacTunnel() {
+ if (this.iface.type !== "BackboneInterface") {
+ return false;
+ }
+ if (this.iface._stats?.ifac_signature) {
+ return true;
+ }
+ return Boolean(
+ this.iface.passphrase || this.iface.network_name || this.iface.ifac_netname || this.iface.ifac_netkey
+ );
+ },
},
methods: {
onIFACSignatureClick: function (ifacSignature) {

diff --git a/tests/frontend/Interface.test.js b/tests/frontend/Interface.test.js
index 6e464efb..830409b1 100644
--- a/tests/frontend/Interface.test.js
+++ b/tests/frontend/Interface.test.js
@@ -115,6 +115,40 @@ describe("Interface.vue", () => {
expect(el.classes()).toContain("min-w-0");
});
});
+
+ it("shows public relay endpoint for non-IFAC BackboneInterface", () => {
+ const wrapper = mountInterface({
+ _name: "0rbit Iceland",
+ type: "BackboneInterface",
+ remote: "iceland.example",
+ target_port: 4242,
+ });
+ expect(wrapper.text()).toContain("iceland.example:4242");
+ expect(wrapper.text()).not.toContain("IFAC tunnel");
+ });
+
+ it("shows IFAC tunnel label for BackboneInterface with passphrase", () => {
+ const wrapper = mountInterface({
+ _name: "kin.earth",
+ type: "BackboneInterface",
+ remote: "rns.kin.earth",
+ target_port: 4242,
+ network_name: "kin.earth",
+ passphrase: "secret",
+ });
+ expect(wrapper.text()).toContain("Backbone (IFAC tunnel)");
+ });
+
+ it("shows IFAC tunnel label when backbone stats include ifac_signature", () => {
+ const wrapper = mountInterface({
+ _name: "kin.earth",
+ type: "BackboneInterface",
+ remote: "rns.kin.earth",
+ target_port: 4242,
+ _stats: { ifac_signature: "a".repeat(64), ifac_size: 16 },
+ });
+ expect(wrapper.text()).toContain("Backbone (IFAC tunnel)");
+ });
});
describe("Interface.vue overflow at different viewports", () => {


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────